package com.begood.leishi.fingerprinter;

import android.content.Context;
import android.support.annotation.NonNull;

import com.begood.leishi.fingerprinter.controller.Controller;

import java.io.IOException;

/**
 * 指纹识别API
 * Created by leishi on 2017/11/30.
 */

public class FingerPrinter {

    Context mContext;
    Controller controller;
    public FingerPrinter(Context context){
        mContext = context;
        controller = new Controller(context);
    }

    /**
     * 必须首先调用
     * 给指纹识别模块上电并申请USB读写权限
     *
     */
    public void open(@NonNull openUsbListener l) throws IOException{
        try {
            controller.openUsb(l);
        }catch (IOException e){
            throw  new IOException(e);
        }
    }

    /**
     * 开启指纹模块回调函数
     */
    public interface openUsbListener {
        //打开指纹仪成功
        void onSuccess();
        //打开指纹仪失败
        void onFailure(String message);
    }
    /**
     * 关闭指纹模块(能省一点点电)
     */
    public void close(){
        controller.closeDevice();
    }
    //使用指纹回调函数(回调函数运行在主线程)
    public interface fingerListener{
        //成功
        void onSuccess(int value);
        //中间状态
        void onNext(int status);
        //失败
        void onFailure(int errorCode);
    }

    /**
     * 注册指纹（IO线程）,回调函数是在主线程
     * 注册指纹流程: 1.按指纹，如果没有检测到手指回调onNext,status返回，放入手指即可
     * ，超时时间10秒 2.第一次录入指纹回调onNext,status返回STATUS_REGISTER_AGAIN,即需要再次录入指纹
     * 3.成功会回调onSuccess，ID为注册ID。已保存到数据库中
     *
     *
     * @param l      注册时回调
     * @param userName 用户名
     */

    public void register(@NonNull fingerListener l,String userName){
        controller.registerFinger(l,userName);
    }
    /**
     * 匹配指纹
     * onSuccess回调函数value参数为寻找到的ID
     *
     * @param l      注册时回调
     */
    public void matchFinger(@NonNull fingerListener l){
        controller.matchFinger(l);
    }
    /**
     * 清空所有数据
     *
     * @param l      注册时回调
     */
    public void deleteData(@NonNull fingerListener l){
        controller.deleteAll(l);
    }
    //
    public void saveUserSql(int id ,String userName){ controller.saveUserSql(id,userName); }
    //从数据库中获取用户名对应的ID
    public long getIDByNameFromDB(String name) {
        return controller.getIDByNameFromDB(name);
    }
    //从数据库中获取ID对应的用户名
    public String getNameByIDFromDB(long id){
        return controller.getNameByIDFromDB(id);
    }

}
